package com.huashi.dealer.modular.business.balance.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huashi.dealer.commonEntity.UserBalanceApply;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

/**
 * 充值申请Mapper接口
 *
 * @author 系统生成
 * @since 2025-01-27
 */
@Mapper
@Component("apiBalanceApplyMapper")
public interface BalanceApplyMapper extends BaseMapper<UserBalanceApply> {

    /**
     * 新增充值申请记录
     *
     * @param balanceApply 充值申请记录
     * @return 影响行数
     */
    int insertBalanceApply(@Param("balanceApply") UserBalanceApply balanceApply);

    /**
     * 获取充值申请列表（分页）
     *
     * @param userId 用户ID
     * @param page 分页参数
     * @return 充值申请列表
     */
    Page<UserBalanceApply> getBalanceApplyList(@Param("userId") Long userId, @Param("page") Page<UserBalanceApply> page);

    /**
     * 获取充值申请详情
     *
     * @param applyId 申请ID
     * @param userId 用户ID
     * @return 充值申请详情
     */
    UserBalanceApply getBalanceApplyDetail(@Param("applyId") Long applyId, @Param("userId") Long userId);

    /**
     * 更新充值申请状态
     *
     * @param applyId 申请ID
     * @param balanceStatus 审核状态
     * @param auditTime 审核时间
     * @param rejectReason 驳回原因
     * @param salesmanStoreUserId 审核业务员ID
     * @return 影响行数
     */
    int updateBalanceApplyStatus(@Param("applyId") Long applyId,
                                @Param("balanceStatus") Integer balanceStatus,
                                @Param("auditTime") Long auditTime,
                                @Param("rejectReason") String rejectReason,
                                @Param("salesmanStoreUserId") Long salesmanStoreUserId);

    /**
     * 获取用户充值申请统计
     *
     * @param userId 用户ID
     * @param balanceStatus 审核状态
     * @return 统计数量
     */
    int getBalanceApplyCount(@Param("userId") Long userId, @Param("balanceStatus") Integer balanceStatus);

    /**
     * 获取待审核的充值申请列表
     *
     * @param page 分页参数
     * @return 待审核申请列表
     */
    IPage<UserBalanceApply> getPendingBalanceApplyList(@Param("page") Page<UserBalanceApply> page);

    /**
     * 根据状态获取充值申请列表
     *
     * @param userId 用户ID
     * @param balanceStatus 审核状态
     * @param page 分页参数
     * @return 充值申请列表
     */
    Page<UserBalanceApply> getBalanceApplyByStatus(@Param("userId") Long userId,
                                                  @Param("balanceStatus") Integer balanceStatus,
                                                  @Param("page") Page<UserBalanceApply> page);
} 